package ru.niir.goodfil.utils;

/**
 * Класс для хранения цены товара в прейскуранте для конкретной клиентской группы.
 * Представляет собой обертку над float, необходим, чтобы фиксировать только измененные цены.
 * В конструкторе указывается т.н. "начальное значение" float. Метод hasChanged возвращает true,
 * если изначальное значение было изменено. Под изменением подразумевается не вызов сеттера setValue, а
 * фактическое изменение значения, т.е. установка значения, отличного от начального.
 *
 * При этом следует особенно внимательно относиться к округлению.
 */
public class FloatPrice
{
    /**
     * Конструктор
     * @param price начальное значение
     */
    public FloatPrice(float price)
    {
        original = price;
    }

    /**
     * Начальное значение
     */
    private float original;

    /**                                         
     * Новое значение
     */
    private float value = -1;

    /**
     * Получить текущее значение
     */
    public float getValue()
    {
        if (value == -1) return original;
        else return value;
    }

    /**
     * Установить значение
     */
    public void setValue(float value)
    {
        if (value != original) this.value = value;
    }

    /**
     * Вернуть строковое представление значения
     */
    @Override
    public String toString()
    {
        return "FloatPrice{" +
               "original=" + original +
               ", value=" + value +
               '}';
    }

    /**
     * Возвращает true, если было установлено значение, отличное от начального
     */
    public boolean hasChanged()
    {
        return value != -1;
    }

    /**
     * Принудительно считать текущее значение начальным
     */
    public void makeOriginal()
    {
        original = value;
        value = -1;
    }


}